package model.dao;

import it.mrcrack.exception.DataFormatException;
import it.mrcrack.exception.DataNotFoundException;
import it.mrcrack.model.DBDAO;

import java.sql.SQLException;
import java.util.List;
import java.util.Vector;

import model.Factory;
import model.bean.NomePotenza;
import model.util.Connessione;

public class NomiPotenzeDBDAO extends DBDAO implements Factory<NomePotenza>{
	public NomiPotenzeDBDAO(Connessione conn) throws DataFormatException {
		super(conn);
	}

	@Override
	public List<NomePotenza> get() throws SQLException, DataFormatException {
		Vector<NomePotenza> vn=new Vector<NomePotenza>();
		SensoriDBDAO sd=new SensoriDBDAO(conn);
		try{
			st=conn.getConn().createStatement();
			rs=st.executeQuery("SELECT * FROM NomiPotenze ORDER BY Nome;");

			while(rs.next()){
				NomePotenza np=new NomePotenza();
				try {
					np.setNome(rs.getString("Nome"));
					np.setUnitaMisura(rs.getString("UnitaMisura"));
					np.setSensore1(sd.get(rs.getInt("SensoriID1")));
					np.setSensore2(sd.get(rs.getInt("SensoriID2")));
					vn.add(np);
				} catch (DataFormatException e) {
					e.printStackTrace();
				} catch (DataNotFoundException e) {
					e.printStackTrace();
				}
			}
		} finally {
			rs.close();
			st.close();
			rs=null;
			st=null;
		}
		return vn;
	}
	/**
	 * Aggiunge un nomePotenza al Database
	 * @param n nomePotenza da aggiungere
	 * @return True se riesce ad inserire, false se non ci riesce
	 * @throws SQLException
	 * @throws DataFormatException 
	 * @throws DataNotFoundException Uno dei sensori passati nel nomePotenza non esiste nel db
	 */
	public boolean put(NomePotenza n) throws SQLException, DataFormatException, DataNotFoundException{
		boolean flag=true;
		SensoriDBDAO sd=new SensoriDBDAO(conn);
		try{
			ps=conn.getConn().prepareStatement(	"INSERT INTO NomiPotenze (Nome, SensoriID1, SensoriID2)" +
			"VALUES (?,?,?);");
			ps.setString(1, n.getNome());
			ps.setInt(2, sd.getId(n.getSensore1()));
			ps.setInt(3, sd.getId(n.getSensore2()));
			if(ps.executeUpdate()<1)
				flag=false;
		} finally {
			ps.close();
			ps=null;
		}
		return flag;
	}
}
